package de.tud.kom.socom.facebook.request; import java.io.File; import java.io.InputStream; import java.net.URISyntaxException; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.ByteArrayBody; import org.apache.http.entity.mime.content.ContentBody; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.InputStreamBody; import org.apache.http.entity.mime.content.StringBody; import de.tud.kom.socom.facebook.request.FBRequestBuilder.ParameterValue; public class FBPostRequest extends FBRequest { public FBPostRequest(String url, Map<String, ParameterValue<?>> params) { super(url, params); } @Override public HttpRequestBase buildHttpRequest() throws URISyntaxException{ return buildHttpPostRequest(); } private HttpRequestBase buildHttpPostRequest() throws URISyntaxException { MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); includePostParameterMap(builder); HttpEntity entity = builder.build(); HttpPost post = new HttpPost(getRequestUrl()); post.setEntity(entity); return post; } private void includePostParameterMap(MultipartEntityBuilder builder) { for(String key : params.keySet()){ ParameterValue<?> valueEnvelope = params.get(key); Object valueObject = valueEnvelope.getValue(); ContentBody valueBody = packValue(valueObject); builder.addPart(key, valueBody); } } private ContentBody packValue(Object valueObject) { ContentBody body = null; if(valueObject instanceof String) { body = new StringBody((String)valueObject, ContentType.DEFAULT_TEXT); } else if (valueObject instanceof File) { body = new FileBody((File)valueObject); } else if (valueObject instanceof InputStream) { body = new InputStreamBody((InputStream)valueObject, "photos"); } else if (valueObject instanceof byte[]) { //XXX is null here ok? body = new ByteArrayBody((byte[])valueObject, null); } return body; } }